package br.com.sgdee.dao.impl;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;

import org.apache.commons.lang.StringUtils;

import br.com.sgdee.dao.PessoaDAO;
import br.com.sgdee.dto.PessoaDTO;
import br.com.sgdee.entidades.acesso.Pessoa;
import br.com.sgdee.util.SQLUtil;

public class PessoaDAOImpl extends GenericoDAOImpl<Pessoa> implements PessoaDAO {

	public PessoaDAOImpl(EntityManager em) {
		
		super(Pessoa.class, em);
	}

	/**
	 * 
	 */
	private static final long serialVersionUID = 5867112620650840377L;
	
	
	/**
	 * Recupera o usuário ({@link Pessoa}}}) logado a partir do emaill 
	 * 
	 */
	@Override
	public Pessoa recuperarPessoaLogin(String email, String senhaCripto) {
		
		
		StringBuilder hql = new StringBuilder();
		
		List<Object> parametros = new ArrayList<Object>();
		
		hql.append("SELECT p ");
		hql.append("FROM Pessoa as p ");
		hql.append("WHERE ");
		hql.append("p.email = ? ");
		
		parametros.add(email);
		
		if (StringUtils.isNotBlank(senhaCripto)) {
		
			hql.append("AND ");
			hql.append("senha = ?");
			
			parametros.add(senhaCripto);
		}

		return recuperarObjeto(hql.toString(), parametros);
	}

	@Override
	public List<Pessoa> recuperarTodosFiltro(PessoaDTO filtro) {
		
		StringBuilder hql = new StringBuilder();
		
		List<Object> parametros = new ArrayList<Object>();
		
		hql.append("SELECT p ");
		hql.append("FROM Pessoa as p ");
		
		montarHql(hql, parametros, filtro);
		
		hql.append("ORDER BY p.nome ");
		
		return recuperarListaObjetos(hql.toString(), parametros);
	}

	@Override
	public Integer quantidadeRegistros(PessoaDTO filtro) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void salvarOuAtualizar(Pessoa entidade) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void excluirRegistro(Pessoa entidade) {
		// TODO Auto-generated method stub
		
	}
	
	
	
	private void montarHql(StringBuilder hql, List<Object> parametros, PessoaDTO filtro) {

		hql.append("WHERE 1=1 ");
		
		if (StringUtils.isNotBlank(filtro.getNome())) {
			
			hql.append("AND ");
			hql.append("upper(replace(p.nome,  'aoAOuUaeiouAEIOUcAaaeiouCAEIOIU', 'ãõÃÕüÜâêîôûÂÊÎÔÛçÀàáéíóúÇÁÉÍÓÍÚ')) LIKE ?");
			
			parametros.add(SQLUtil.getLikeParameter(filtro.getNome().toUpperCase()));
		}
		
	}

}